package com.topten.beans;


import java.awt.Panel;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpSession;
import javax.swing.JOptionPane;
import javax.swing.plaf.OptionPaneUI;

import org.primefaces.event.RowEditEvent;

import com.topten.basicas.comum.Cidade;
import com.topten.basicas.comum.UnidadeFederativa;
import com.topten.basicas.seguranca.Perfil;
import com.topten.basicas.seguranca.Usuario;
import com.topten.basicas.varejo.Cliente;
import com.topten.basicas.varejo.Tipo_Cliente;
import com.topten.exceptions.NegocioException;
import com.topten.negocio.CpfJaCadastradoException;
import com.topten.negocio.Fachada;
import com.topten.negocio.IFachada;


@ManagedBean
@SessionScoped
public class ClienteBean {

	private Cliente cliente = new Cliente();
	private Usuario usuario = new Usuario();
	private String mensagemSucesso;
	private String mensagemErro;
	private Tipo_Cliente[] tipoCliente;
	public Integer numer;
	
	
	public void limparCompos(){
		this.cliente.setCodigo(null) ;
		
		this.cliente.setNome(null);
		//this.cliente.setRg(null);
		this.cliente.getUsuario().setLogin(null);
		this.cliente.getEndereco().setBairro(null);
		this.cliente.getEndereco().setCep(null);
		this.cliente.getEndereco().setComplemento(null);
		this.cliente.getEndereco().setLogradouro(null);
		this.cliente.getEndereco().setNumero(null);
		this.cliente.setDocumento1(null);
		this.cliente.setDocumento2(null);
		this.cliente.setEmail(null);
	}
	
	public Usuario getUsuario(){
		return this.usuario;
	}
	public void setUsuario(Usuario usuario){
		this.usuario = usuario;
	}
	public Integer getNumer() {
		return numer;
	}
	public void setNumer(Integer numer) {
		this.numer = numer;
	}
	
	public void setTipoCliente(Tipo_Cliente[] tipoCliente) {
		this.tipoCliente = tipoCliente;
	}
	public String getMensagemErro(){
		return this.mensagemErro;
	}
	public void setMensagemErro(String mensagemErro){
		this.mensagemErro = mensagemErro;
	}
	public String getMensagemSucesso(){
		return this.mensagemSucesso;
	}
	public void setMensagemSucesso(String mensagemSucesso){
		this.mensagemSucesso = mensagemSucesso;
	}
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public List<Perfil> getListarPerfil(){
		return Fachada.getInstancia().listarPerfil();
	}
	
	public Cliente getBuscarClientePorId() {
		return Fachada.getInstancia().buscarClienteId(cliente.getCodigo());
	}
	
	public List<Cliente> getListarCliente(){
		return Fachada.getInstancia().listarCliente();
	}
	
	public List<UnidadeFederativa> getListarUnidadeFederativa(){	
		return Fachada.getInstancia().listarUnidadesFederativas();	
	}
	
	public List<Cidade> getListarCidade(){
		return Fachada.getInstancia().listarCidades();
	}
	
	public Tipo_Cliente[] getTipoCliente(){
		return Tipo_Cliente.values();
	}
	
	public String listaDeCliente(){
		return "listarCliente.xhtml?faces-redirect=true";
	}
	
	public String voltar(){
		return "cliente.xhtml?faces-redirect=true";
	}
	
	public String removerCliente(Cliente cliente){
		Fachada.getInstancia().removerCliente(cliente);
		return "listarCliente.xhtml?faces-redirect=true";
	}
	
	public String limpar(){
		this.limparCompos();
		return "cliente.xhtml?faces-redirect=true";
	}
	
	public String salvarCliente() {
		IFachada fachada = Fachada.getInstancia();	
		try{				
			fachada.inserirCliente(cliente, usuario);										
			
			limparSessao();			
			//this.mensagemSucesso = "CFP cadastrado com sucesso!";
			
			
		}catch(CpfJaCadastradoException e){
			this.mensagemErro = e.getMessage();			
		}
		//this.mensagemSucesso = "CFP cadastrado com sucesso!";
		this.setMensagemSucesso("CFP cadastrado com sucesso!");
		return "cliente.xhtml?faces-redirect=true";
	}
	
	public String atualizarCliente(Cliente cliente){
		Fachada.getInstancia().atualizarCliente(cliente);
		return "listarCliente";
	}
	
	public String alterarCliente(){
		Fachada.getInstancia().atualizarCliente(cliente);
		return "listarCliente";
	}
	
	public String alterar(Cliente clienteParam){
		this.cliente = clienteParam;
		return "cliente";
	}	
	
	public void messagemSucesso(ActionEvent evnte){
		FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Cliente cadastrado com sucesso!"));
	}
	
	public void onEdit(RowEditEvent event){
		Cliente client = (Cliente)event.getObject();
		Fachada.getInstancia().atualizarCliente(client);
		System.out.println(client.getDocumento1());
	}
	
	public void limparSessao(){
		HttpSession sessao = ((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false));
		if (sessao != null){
			sessao.removeAttribute("clienteBean");
		}
	}
}
